Socket
Socket
Sign inDemoInstall

detective-amd

Package Overview
Dependencies
9
Maintainers
2
Versions
33
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    detective-amd

Find all dependencies within a JavaScript file using AMD module syntax


Version published
Weekly downloads
1.2M
increased by4.3%
Maintainers
2
Install size
4.43 MB
Created
Weekly downloads
 

Package description

What is detective-amd?

The detective-amd package is designed for analyzing AMD (Asynchronous Module Definition) style modules. It allows developers to parse AMD module definitions to extract dependencies, providing a way to understand and manipulate the dependency tree of projects using this module format.

What are detective-amd's main functionalities?

Extracting dependencies from AMD modules

This feature allows you to pass AMD module source code as a string to the detective function, which returns an array of the module's dependencies. It's useful for analyzing and understanding module dependencies.

const detective = require('detective-amd');
const src = "define(['a', 'b'], function (a, b) {});";
const dependencies = detective(src);
// dependencies would be ['a', 'b']

Other packages similar to detective-amd

Readme

Source

Detective-AMD CI npm npm

Returns a list of dependencies for a given JavaScript file or AST using any of the AMD module syntaxes.

Inspired by substack/node-detective but built for AMD.

npm install detective-amd

Usage

Let's say we have the following file definitions:


// a.js
define(['./b', './c'], function (b, c) {
  console.log(b, c);
});

// b.js
define({
  name: 'foo'
});

// c.js
define(function () {
  return 'bar';
});

Here's how you can grab the list of dependencies of a.js synchronously.

const detective = require('detective-amd');

const srca = fs.readFileSync('a.js', 'utf8');

// Pass in the source code or an AST (if you've already parsed the file)
console.log(detective(srca)); // prints ['./b', './c']

You may also (optionally) configure the detective via a second object argument detective(src, options) that supports the following options:

  • skipLazyLoaded: (Boolean) whether or not to omit inner requires in the list of extracted dependencies.
  • Note: this does not affect the REM form since those inner requires are not "lazily" fetched.

Syntax Support

Supports the 4 forms of AMD module syntax:

  • "named": define('name', [deps], func)
  • "dependency list": define([deps], func)
  • "factory": define(func(require))
  • "no dependencies": define({})

Extra forms:

  • "driver script" (or entry-point) syntax: require([deps], func)
  • "REM" (or CommonJS-like) form: define(function(require, exports, module) {}).

Also handles dynamically loaded dependencies (ex: inner requires).

Supports driver scripts

You can also find the dependencies from a script that has a top-level require (an app initialization/driver/entry-point script):

require([
  './a'
], function (a) {
  // My app will get booted up from here
});

Expression-based requires

If there's a require call that doesn't have a string literal but an expression, a string (escodegen-generated) representation will be returned.

For example, if a.js was of the "factory" form and contained a dynamic module name:

// a.js

define(function (require) {
  // Assume str is some variable that gets set to a string dynamically
  // const str = ...

  const b = require('./' + str);
  const c = require('./c');

  console.log(b, c);
});

The dependency list will be: [ '\'./\' + str', './c' ]

  • Even though that string representation isn't incredibly useful, it's still added to the list to represent/count that dependency

Keywords

FAQs

Last updated on 22 Feb 2022

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc